package com.atjava.nebula.core.util.bean;

import java.io.Serializable;
import java.util.Map;

/**
 * 动态JavaBean接口
 * 
 * @author kyo
 */
public interface DynamicBean extends Serializable {
	/**+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*
	 * 							常量定义区
	 **+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
	/**
	 * 分类：所有属性
	 */
	int CLY_ALL_PROPERTIES 	= 0;
	/**
	 * 分类：所有静态属性
	 */
	int CLY_STATIC_PROPS 	= 1;
	/**
	 * 分类：所有(已声明的)动态属性
	 */
	int CLY_DYNAMIC_PROPS	= 2;
	
	/**+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*
	 * 							方法定义区
	 **+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
	/**
	 * 获得指定属性的值
	 * @param propName	不能为NULL
	 * @return
	 */
	Object get(String propName);
	/**
	 * 设置指定属性的值(能处理基本的数据类型转换)
	 * @param propName	不能为NULL
	 * @param value
	 */
	void set(String propName, Object value);
	
	/**
	 * 声明(动态)属性
	 * (注：以便能根据属性类型进行相应的自动转换)
	 * @param propName	不能为NULL
	 * @param propType	(如果为NULL,则取消相应的声明信息)
	 */
	void declare(String propName, Class propType);
	
	/**
	 * 描述指定类型的所有属性，格式：Map.Entry&lt;propName,propType>
	 * @param classify	可取值为：DynamicBean.CLY_ALL_PROPERTIES、DynamicBean.CLY_STATIC_PROPS、
	 * 								DynamicBean.CLY_DYNAMIC_PROPS
	 * @return
	 */
	Map<String,Class> describe(int classify);	
}
